<?php
class Delivery_Model_Mapper_Ciudades
	extends Delivery_Model_Mapper_Abstract
{
	
	public function getDbTable()
	{
		return parent::getDbTable( 'Ciudades' );
	}
	
	public function insert( $ciudad )
	{
		$dbTable= $this->getDbTAble();
		
		if ( ! $ciudad->getId() ){	
			return $ciudad->idCiudad = $dbTable->insert( $ciudad );
		} 
		
		return $ciudad->idCiudad;
	}
	
	/**
	 * @param int $idCiudad
	 * @return object Delivery_Model_Ciudad
	 */
	public function getById( $idCiudad ){
	
		if ( $this->getIdentityMap()->isRegistered( 'Delivery_Model_Ciudad', $idCiudad )){
			return $this->getIdentityMap()->get( 'Delivery_Model_Ciudad', $idCiudad );
		}
		
		$dbTable= $this->getDbTAble();
		$row	= $dbTable->getById( $idCiudad );
	
		if( empty($row) ){
			throw new Delivery_Model_Exception( Delivery_Model_Exception::CITY_NOT_FOUND );
		}
		
		return $this->_fetch( $row );
	}
	
	public function getByNombre( $nombre, $provincia = null )
	{
		$dbTable= $this->getDbTAble();
		$row	= $dbTable->getByNombre( $nombre, $provincia );
	
		if( ! empty($row) ){
			return $this->_fetch( $row );
		}
		
		return null;
	}
	
	/**
	 * @param array ids
	 *  @return Delivery_Model_Collection_Ciudades
	 */
	public function getByIds( $ids )
	{
		$dbTable= $this->getDbTAble();
		
		return $this->_fetchCollection(
			'Ciudades',
			$dbTable->getByIds( $ids )
		);
	}
	
	/**
	 * @return Delivery_Model_Collection_Ciudades
	 */
	public function getAll(){
	
		$dbTable= $this->getDbTAble();
			
		return $this->_fetchCollection(
			'Ciudades',
			$dbTable->getAll()
		);
	}	
	
	/**
	 * @param array
	 * @return Delivery_Model_Collection_Ciudades
	 */
	public function getByParams( $params, $offset = null, $limit = null, $order = null ){
		
		$dbTable = $this->getDbTAble();
			
		return $this->_fetchCollection(
			'Ciudades',
			$dbTable->getByParams( $params, $offset = null, $limit = null, $order = null )
		);
	}
	
	/**
	 * @param array
	 * @return int
	 */
	public function countByParams( $params ){
		return $this->getDbTAble()->countByParams($params);
	}
	
	
	/**
	 * @param array
	 * @return object Delivery_Model_Ciudad
	 */
	protected function _fetch( $row )
	{
		$ciudad = new Delivery_Model_Ciudad( $row );
		
		$this->getIdentityMap()->set( $ciudad, $ciudad->getId() );
		
		return $ciudad;
	}
	
}